package com.esbi.projectwebsocket.suanLiSanQi.gongDan.test001;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Service;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;

@Service
public class ExcelService {

    // 读取指定路径的 Excel 文件并转换为 JSONArray 方法
    public JSONArray readExcel(String filePath) {
        // 创建用于存储 JSON 对象的 JSONArray
        JSONArray dataArray = new JSONArray();
        try (Workbook workbook = new XSSFWorkbook(new FileInputStream(filePath));) {
            // 获取 Excel 文件的第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 获取工作表中的行数
            int rowCount = sheet.getPhysicalNumberOfRows();
            // 如果有行数据（行数大于 0）
            if (rowCount > 0) {
                // 获取第一行作为标题行
                Row headerRow = sheet.getRow(0);
                // 获取标题行的单元格数量
                int cellCount = headerRow.getPhysicalNumberOfCells();
                // 创建用于存储标题的字符串数组
                String[] fieldNames = new String[cellCount];
                // 遍历标题行的每个单元格，获取标题内容并存入数组
                for (int j = 0; j < cellCount; j++) {
                    Cell cell = headerRow.getCell(j);
                    if (cell!= null) {
                        fieldNames[j] = cell.getStringCellValue();
                    }
                }
                // 遍历除标题行外的其余行数据
                for (int i = 1; i < rowCount; i++) {
                    // 获取当前行
                    Row row = sheet.getRow(i);
                    if (row!= null) {
                        // 创建用于存储当前行数据的 JSONObject
                        JSONObject rowData = new JSONObject();
                        // 遍历当前行的每个单元格
                        for (int j = 0; j < cellCount; j++) {
                            // 获取当前单元格
                            Cell cell = row.getCell(j);
                            if (cell!= null) {
                                // 根据单元格类型进行不同的处理并存入 JSON 对象
                                switch (cell.getCellType()) {
                                    case STRING:
                                        rowData.put(fieldNames[j], cell.getStringCellValue());
                                        break;
                                    case NUMERIC:
                                        rowData.put(fieldNames[j], cell.getNumericCellValue());
                                        break;
                                    case BOOLEAN:
                                        rowData.put(fieldNames[j], cell.getBooleanCellValue());
                                        break;
                                    default:
                                        rowData.put(fieldNames[j], null);
                                }
                            }
                        }
                        // 将当前行的 JSON 对象添加到 JSONArray 中
                        dataArray.add(rowData);
                    }
                }
            }
        } catch (IOException e) {
            // 打印发生的 IOException 异常信息
            e.printStackTrace();
        }
        // 返回包含所有行数据的 JSONArray
        return dataArray;
    }
}